#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include "getch.h"

int getch(void)
{
	// 获取现在的终端输入配置方案
	struct termios old;
	int ret = tcgetattr(STDIN_FILENO,&old);
	if(0 > ret)
	{
		perror("tcgetattr");
		return -1;
	}

	// 新建一个终端配置方案(不用回车确认\不回显)
	struct termios new = old;
	new.c_lflag &= ~(ECHO|ICANON);

	// 设置新的终端配置方案
	ret = tcsetattr(STDIN_FILENO,TCSANOW,&new);
	if(0 > ret)
	{
		perror("tcsetattr");
		return -2;
	}

	// 使用新的终端配置方案从终端获取数据
	int key_val = 0;
	do{
		key_val += getchar();
	}while(stdin->_IO_read_end - 
		stdin->_IO_read_ptr);

	// 还原终端配置方案
	ret = tcsetattr(STDIN_FILENO,TCSANOW,&old);
	if(0 > ret)
	{
		perror("tcsetattr");
		return -3;
	}

	// 返回获取到的数据
	return key_val;
}
